from pathlib import Path
import argparse
import yaml
import os

class Config:

    @staticmethod
    def config_path():
        """
        获取配置文件的路径。
        
        该方法首先确定项目路径，然后构建配置文件的默认路径。
        如果默认路径上的配置文件存在，则返回该路径；否则返回一个固定的配置路径。
        
        Returns:
            Path: 配置文件的路径。
        """
        # 确定项目路径，即当前文件的父目录的父目录
        project_path = Path(__file__).parent.parent
        # 构建默认的配置文件路径
        default_config_path = project_path / "config" / "config.yaml"
        # 检查配置文件是否存在，存在则使用，否则使用固定路径
        if os.path.exists(default_config_path):
            config_path = default_config_path
        else:
            config_path = project_path / "config" / "config.yaml"
        return config_path
    
    @staticmethod
    def load_config() -> dict:
        """
        加载配置文件。
        
        该方法通过命令行参数解析器获取配置文件路径，然后读取并解析配置文件。
        如果未指定配置文件路径，则使用[config_path](file:///Users/tengyun1/AI/mcp_vision/util/config.py#L8-L15)方法确定的路径。
        
        Returns:
            dict: 解析后的配置文件内容。
        """
        # 创建命令行参数解析器
        parser = argparse.ArgumentParser()
        # 添加配置文件路径的命令行参数
        parser.add_argument("--config", default=Config.config_path(), help="path to config file")
        # 解析命令行参数
        args = parser.parse_args()
        # 打开并读取配置文件
        with open(args.config, "r", encoding="utf-8") as f:
            # 使用yaml库解析配置文件内容
            config = yaml.load(f, Loader=yaml.FullLoader)
        # 返回解析后的配置内容
        return config